package rsp

import (
	"github.com/gin-gonic/gin"
	"io"
	"net/http"
)

// BaseResultRsp 是用于封装 API 响应的基础结构体
type BaseResultRsp struct {
	Code    int    `json:"code"` // 将 Status 改为 Code
	Message string `json:"message"`
}

// SuccessResultRsp 是用于封装 API 成功响应的结构体
type SuccessResultRsp struct {
	BaseResultRsp
	Data interface{} `json:"data"`
}

// ErrorResultRsp 是用于封装 API 错误响应的结构体
type ErrorResultRsp struct {
	BaseResultRsp
}

// 原始
func OriginSuccess(c *gin.Context, data interface{}) {
	c.JSON(http.StatusOK, data)
}

// 正确状态处理
func Success(c *gin.Context, msg string, data interface{}) {
	response := SuccessResultRsp{
		BaseResultRsp: BaseResultRsp{
			Code:    200, // 将 Status 改为 Code
			Message: msg,
		},
		Data: data,
	}
	c.JSON(http.StatusOK, response)
}

// 错误状态处理
func Error(c *gin.Context, msg string) {
	response := ErrorResultRsp{
		BaseResultRsp: BaseResultRsp{
			Code:    400, // 将 Status 改为 Code
			Message: msg,
		},
	}
	c.JSON(http.StatusBadRequest, response)
}

// 文件流响应处理
func FileResponse(c *gin.Context, key string, fileStream io.ReadCloser, contentType string) {
	defer fileStream.Close()

	// 设置响应头
	c.Header("Content-Disposition", "attachment; filename="+key)
	c.Header("Content-Type", contentType)

	// 返回文件流
	c.DataFromReader(http.StatusOK, int64(-1), contentType, fileStream, nil)
}
